/*
 * 
 */
package w83a.w83aDAO;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.apache.commons.lang.StringUtils;

import w83a.util.jdbc.W83aDataBase;
import w83a.w83aBeans.W83aDocumentacionBean;
import w83a.w83aBeans.W83aDocumentoBean;
import w83a.w83aDAO.w83aConstantesBD.W83aDocumentacionBD;
import w83a.w83aUtilidadesComunes.W83aClsConstantes;
import w83a.w83aUtilidadesComunes.W83aClsTrazas;

// TODO: Auto-generated Javadoc
/**
 * The Interface W83bIPreavisosDAO.
 * @author a
 */
public class W83aDocumentacionDAO implements W83aIDocumentacionDAO{
	
	public java.util.HashMap buscarDocumentacion(W83aDocumentacionBean param) throws Exception{
		W83aClsTrazas.trazaDebug(null,"documentacionDAO inicio");

		HashMap datos=new HashMap();
		StringBuffer strSql = new StringBuffer(W83aClsConstantes.CUARENTA);
		List params = new ArrayList();
		
		strSql.append("SELECT 0 AS CONTADOR, NUMERO,TIPO,FECHAELECCION,FECHAENTRADA,FECHAIMPUGNACION,DOCUMENTOS,VERS FROM w83b.");
		strSql.append(W83aDocumentacionBD.vistaDatosDocumentacion).append(" WHERE ");
		
		//Búsqueda por acta
		if(param.getTipoBusqueda().equals(W83aClsConstantes.BUSQUEDA_ELECTORAL_ACTA)){
			
			//Tipo Acta
			strSql.append(W83aDocumentacionBD.tipo).append(" = ? AND ");
			params.add(W83aClsConstantes.BUSQUEDA_ELECTORAL_TIPO_ACTA);
			
			//Generamos el número de acta correctamente
			strSql.append(W83aDocumentacionBD.numero).append(" = ? ");
			
			StringBuffer numActa = new StringBuffer();
			
			numActa.append((param.getNumActaTerritorio().length()==1)?'0'+param.getNumActaTerritorio():param.getNumActaTerritorio());
			numActa.append("/");
			numActa.append(param.getNumActaAnyo());
			numActa.append("/");
			
			if(param.getNumActaNumero().length()==1){
				numActa.append("00000").append(param.getNumActaNumero());
			}else if(param.getNumActaNumero().length()==2){
				numActa.append("0000").append(param.getNumActaNumero());
			}else if(param.getNumActaNumero().length()==3){
				numActa.append("000").append(param.getNumActaNumero());
			}else if(param.getNumActaNumero().length()==4){
				numActa.append("00").append(param.getNumActaNumero());
			}else if(param.getNumActaNumero().length()==5){
				numActa.append("0").append(param.getNumActaNumero());
			}else{
				numActa.append(param.getNumActaNumero());
			}
			
			params.add(numActa.toString());
			
		//Búsqueda por preaviso			
		}else if(param.getTipoBusqueda().equals(W83aClsConstantes.BUSQUEDA_ELECTORAL_PREVISO)){
			
			//Tipo preaviso
			strSql.append(W83aDocumentacionBD.tipo).append(" = ? AND ");
			params.add(W83aClsConstantes.BUSQUEDA_ELECTORAL_TIPO_PREAVISO);
			
			
			//Generamos el número de Preaviso correctamente
			strSql.append(W83aDocumentacionBD.numero).append(" = ?");
			
			StringBuffer numPreaviso = new StringBuffer();
			
			numPreaviso.append((param.getNumPreavisoTerritorio().length()==1)?'0'+param.getNumPreavisoTerritorio():param.getNumPreavisoTerritorio());
			numPreaviso.append("/");
			numPreaviso.append(param.getNumPreavisoAnyo());
			numPreaviso.append("/");
			
			if(param.getNumPreavisoNumero().length()==1){
				numPreaviso.append("00000").append(param.getNumPreavisoNumero());
			}else if(param.getNumPreavisoNumero().length()==2){
				numPreaviso.append("0000").append(param.getNumPreavisoNumero());
			}else if(param.getNumPreavisoNumero().length()==3){
				numPreaviso.append("000").append(param.getNumPreavisoNumero());
			}else if(param.getNumPreavisoNumero().length()==4){
				numPreaviso.append("00").append(param.getNumPreavisoNumero());
			}else if(param.getNumPreavisoNumero().length()==5){
				numPreaviso.append("0").append(param.getNumPreavisoNumero());
			}else{
				numPreaviso.append(param.getNumPreavisoNumero());
			}
			
			params.add(numPreaviso.toString());
			
		//Busqueda por centro
		}else if(param.getTipoBusqueda().equals(W83aClsConstantes.BUSQUEDA_ELECTORAL_CENTRO)){
			
			strSql.append(W83aDocumentacionBD.centro).append(" = ?");
			strSql.append(" AND ").append(W83aDocumentacionBD.fechaEleccionActa);
			W83aClsTrazas.trazaDebug(null,"param.getHistorico()="+param.getHistorico());
			if(param.getHistorico().equals("si")){
				//de hace 4 años hacia atras
				W83aClsTrazas.trazaError(null,"entrado si",null);
				if("eu".equals(param.getIdioma())){
					W83aClsTrazas.trazaError(null,"entrado eu",null);
					strSql.append("<=TO_DATE (?,'yyyy/MM/dd')");
				}else{
					W83aClsTrazas.trazaError(null,"entrado es",null);
					strSql.append("<=TO_DATE (?,'dd/MM/yyyy')");
				}
			}else{//de 4 años hasta hoy
				W83aClsTrazas.trazaError(null,"entrado no",null);
				if("eu".equals(param.getIdioma())){
					W83aClsTrazas.trazaError(null,"entrado eu",null);
					strSql.append(">=TO_DATE (?,'yyyy/MM/dd')");
				}else{
					W83aClsTrazas.trazaError(null,"entrado es",null);
					strSql.append(">=TO_DATE (?,'dd/MM/yyyy')");
				}
			}
			params.add(param.getCentroTrabajo().getCodCentroTrabajo());//
			params.add(param.getFechaEleccion());
		}
		



		
		//ORDER
		if(StringUtils.isNotEmpty(param.getIdColumna())){
			strSql.append(" ORDER BY ").append(param.getIdColumna()).append(" ").append(param.getSort());
		}
		
		//Pintar la SQL
		W83aClsTrazas.trazaDebug(null,"sql-> "+strSql.toString());
		W83aClsTrazas.trazaDebug(null,"params-> "+params);
		
		
		//Ejecutamos
		List listaDatosDocumentacion = W83aDataBase.executeQuery(strSql.toString(),params,W83aDocumentacionBean.class,param.getUsuarioBean(), null);
		
		W83aClsTrazas.trazaDebug(null,"tamano-> "+listaDatosDocumentacion.size());
		List listaDocumentos=new ArrayList();
		W83aDocumentacionBean docs=new W83aDocumentacionBean();
		W83aDocumentoBean doc=new W83aDocumentoBean();
		String documentosString="";
		String undoc="";
		for(int i=0;i<listaDatosDocumentacion.size();i++){
			W83aClsTrazas.trazaError(null,"i-> "+i,null);
			docs=(W83aDocumentacionBean)listaDatosDocumentacion.get(i);
			W83aClsTrazas.trazaError(null,"docs-> "+docs,null);
			documentosString=docs.getDocumentos();
			W83aClsTrazas.trazaError(null,"documentosString-> "+documentosString,null);
			if(!StringUtils.isEmpty(documentosString)){
				W83aClsTrazas.trazaError(null,"documentosString novacio-> ",null);
				String[] documentos=documentosString.split("#");
				W83aClsTrazas.trazaError(null,"documentos-> "+documentos,null);
				String[] campos=new String[0];//NOPMD
				W83aClsTrazas.trazaError(null,"campos-> "+campos,null);
				for(int c=0;c<documentos.length;c++){
					W83aClsTrazas.trazaError(null,"c-> "+c,null);
					doc=new W83aDocumentoBean();//NOPMD
					W83aClsTrazas.trazaError(null,"doc-> "+doc,null);
					undoc=documentos[c];
					W83aClsTrazas.trazaError(null,"undoc-> "+undoc,null);
					campos=undoc.split(",");
					W83aClsTrazas.trazaError(null,"campos-> "+campos,null);
					if(StringUtils.isNotEmpty(campos[5])){
						W83aClsTrazas.trazaError(null,"campos[5] no vacio",null);
						doc.setNombre(campos[0]);
						W83aClsTrazas.trazaError(null,"doc.getNombre()"+doc.getNombre(),null);
						if(W83aClsConstantes.CONSTANTE_CASTELLANO.equals(param.getIdioma())&&StringUtils.isNotEmpty(campos[1])){
							W83aClsTrazas.trazaError(null,"castellano",null);
							doc.setDescTipo(campos[1]);
						}else if(W83aClsConstantes.CONSTANTE_EUSKARA.equals(param.getIdioma())&&StringUtils.isNotEmpty(campos[2])){
							W83aClsTrazas.trazaError(null,"euskera",null);
							doc.setDescTipo(campos[2]);
						}
						doc.setFechaRegistro(campos[3]);
						doc.setNumeroRegistro(campos[4]);
						doc.setClave(campos[5]+"_"+campos[6]);
						listaDocumentos.add(doc);
					}
				}
			}
		}
		W83aClsTrazas.trazaDebug(null,"fin for");
		datos.put("datos", listaDatosDocumentacion);
		
		W83aClsTrazas.trazaDebug(null,"listaDatosDocumentacion="+listaDatosDocumentacion);
		datos.put("documentos", listaDocumentos);
		
		W83aClsTrazas.trazaDebug(null,"listaDocumentos="+listaDocumentos);
		W83aClsTrazas.trazaDebug(null,"documentacionDAO fin");
		return datos;		
	}
}